package com.example.auth.util;

import com.example.auth.domain.DataNodeConfig;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
public class TotalBasedRoundRobinAllocator {

    private List<DataNodeConfig> dataNodes;

    /**
     * 根据用户总数进行轮询分配
     * @param totalUsers 当前用户总数
     * @return 分配的数据节点
     */
    public DataNodeConfig allocateNodeByTotal(Integer totalUsers) {

        // 核心逻辑：使用总数对节点数量取模
        int nodeIndex = (int) (totalUsers % this.dataNodes.size());
        DataNodeConfig node = this.dataNodes.get(nodeIndex);

        log.info("根据用户总数 {} 分配节点: {} (索引: {})",
                totalUsers, node.getNodeServerName(), nodeIndex);
        return node;
    }

    public TotalBasedRoundRobinAllocator(List<DataNodeConfig> dataNodes) {
        this.dataNodes = dataNodes;
    }
}
